// 1005. K 次取反后最大化的数组和
// 给你一个整数数组 nums 和一个整数 k ，按以下方法修改该数组：

// 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
// 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。

// 以这种方式修改数组后，返回数组 可能的最大和 。

// 示例 1：

// 输入：nums = [4,2,3], k = 1
// 输出：5
// 解释：选择下标 1 ，nums 变为 [4,-2,3] 。
// 第一步：将数组按照绝对值大小从大到小排序，注意要按照绝对值的大小
// 第二步：从前向后遍历，遇到负数将其变为正数，同时K--
// 第三步：如果K还大于0，那么反复转变数值最小的元素，将K用完
// 第四步：求和
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
 var largestSumAfterKNegations = function(nums, k) {
    let length=nums.length;
    let result=0;
    nums.sort((a,b)=>{
        return Math.abs(b)-Math.abs(a);// return返回 否则值不改变
    })
    for(let i=0;i<nums.length;i++){
        if(k>0&&nums[i]<0){
            nums[i]=-nums[i];
            k--;
        }
    }
    while(k>0){
        nums[length-1]=-nums[length-1];
        k--;
    }
    for(let i in nums){
        result+=nums[i];
    }
    return result;
};